﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using BibliotecaProjeto.funcionario;
using System.Data;

namespace BibliotecaProjeto.funcionario
{
    public class DadosFuncionario : persistencia.ConexaoSqlServer
    {

        #region Atributos
        private string instSql;
        #endregion

        #region Construtores
        /// <summary>
        /// Construtor da Classe
        /// </summary>
        #endregion
        public DadosFuncionario() { }

        #region Métodos
        #region conexão com select
        public List<Funcionario> selectFuncionario()
        {
            List<Funcionario> retorno = new List<Funcionario>();
            try
            {
               abrirConexao();
                SqlCommand cmd = new SqlCommand("SELECT fun_matricula, fun_nome, fun_cpf, fun_rg, fun_telefone, fun_cargo, fun_salario, fun_rg," +
                "fun_cep, fun_rua, fun_numero, fun_complemento, fun_bairro, fun_cidade, fun_uf, fun_pais FROM funcionario", conBD);
                SqlDataReader DbReader = cmd.ExecuteReader();

                 //fun_dataNascimento
                 //fun_dataAdmissao
                 //fun_dataDemissao,
                while (DbReader.Read())
                {
                    Funcionario f = new Funcionario();
                    f.matricula = DbReader.GetInt32(DbReader.GetOrdinal("fun_matricula"));
                    f.nome = DbReader.GetString(DbReader.GetOrdinal("fun_nome"));
                    f.cpf = DbReader.GetString(DbReader.GetOrdinal("fun_cpf"));
                    f.rg = DbReader.GetString(DbReader.GetOrdinal("fun_rg"));
                   // f.dataNascimento = DbReader.GetDateTime(DbReader.GetOrdinal("fun_dataNascimento"));
                    f.telefone = DbReader.GetString(DbReader.GetOrdinal("fun_telefone"));
                    f.cargo = DbReader.GetString(DbReader.GetOrdinal("fun_cargo"));
                    f.salario = DbReader.GetDouble(DbReader.GetOrdinal("fun_salario"));
                    //f.dataAdmissao = DbReader.GetDateTime(DbReader.GetOrdinal("fun_dataAdmissao"));
                    //f.dataDemissao = DbReader.GetDateTime(DbReader.GetOrdinal("fun_dataDemissao"));
                    f.cep = DbReader.GetString(DbReader.GetOrdinal("fun_cep"));
                    f.rua = DbReader.GetString(DbReader.GetOrdinal("fun_rua"));
                    f.numero = DbReader.GetString(DbReader.GetOrdinal("fun_numero"));
                    f.complemento = DbReader.GetString(DbReader.GetOrdinal("fun_complemento"));
                    f.bairro = DbReader.GetString(DbReader.GetOrdinal("fun_bairro"));
                    f.cidade = DbReader.GetString(DbReader.GetOrdinal("fun_cidade"));
                    f.uf = DbReader.GetString(DbReader.GetOrdinal("fun_uf"));
                    f.país = DbReader.GetString(DbReader.GetOrdinal("fun_pais"));
                    retorno.Add(f);
                }

                DbReader.Close();
                cmd.Dispose();
                fecharConexao();;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao selecionar " + ex.Message);
            }
            return retorno;
        }
        #endregion


        public void cadastrar(Funcionario funcionario)
        {
            try
            {
                SqlCommand cmd = conBD.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "inserirFunc";

                cmd.Parameters.Add(new SqlParameter("@matricula", funcionario.matricula));
                cmd.Parameters.Add(new SqlParameter("@nome", funcionario.nome));
                cmd.Parameters.Add(new SqlParameter("@cpf", funcionario.cpf));
                cmd.Parameters.Add(new SqlParameter("@rg", funcionario.rg));
                //cmd.Parameters.Add(new SqlParameter("@dataNascimento", funcionario.dataNascimento));
                cmd.Parameters.Add(new SqlParameter("@telefone", funcionario.telefone));
                cmd.Parameters.Add(new SqlParameter("@cargo", funcionario.cargo));
                cmd.Parameters.Add(new SqlParameter("@salario", funcionario.salario));
                //cmd.Parameters.Add(new SqlParameter("@dataAdmissao", funcionario.dataAdmissao));
                //cmd.Parameters.Add(new SqlParameter("@dataDemissao", funcionario.dataDemissao));
                cmd.Parameters.Add(new SqlParameter("@cep", funcionario.cep));
                cmd.Parameters.Add(new SqlParameter("@rua", funcionario.rua));
                cmd.Parameters.Add(new SqlParameter("@numero", funcionario.numero));
                cmd.Parameters.Add(new SqlParameter("@complemento", funcionario.complemento));
                cmd.Parameters.Add(new SqlParameter("@bairro", funcionario.bairro));
                cmd.Parameters.Add(new SqlParameter("@cidade", funcionario.cidade));
                cmd.Parameters.Add(new SqlParameter("@uf", funcionario.uf));
                cmd.Parameters.Add(new SqlParameter("@pais", funcionario.país));

                cmd.Prepare();
                abrirConexao();
                cmd.ExecuteNonQuery();
                fecharConexao();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void atualizar(Funcionario funcionario)
        {
            try
            {
               abrirConexao();
                instSql = "update funcionario set nome = '" + funcionario.nome + "', cpf = '" + funcionario.cpf + "', rg = '" + funcionario.rg + "', telefone = '" + funcionario.telefone + "', cargo = '" + funcionario.cargo + "', salario = " + funcionario.salario +  " where matricula = " + funcionario.matricula + "";
                fecharConexao();

                //dataNascimento = " + funcionario.dataNascimento + "
                //", dataAdmissao = " + funcionario.dataAdmissao + ", dataDemissao = " + funcionario.dataDemissao +
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void remover(Funcionario funcionario)
        {
            try
            {
               abrirConexao();
                instSql = "delete from funcionario where matricula = " + funcionario.matricula + "";
                fecharConexao();;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        #endregion
    }
}